home *** CD-ROM | disk | FTP | other *** search
- ; SCREEN-SAVE
- ; (C) COPYRIGHT 1986 ANDREW FRIED
- ; COMPUTER SHOPPER JUNE86 P108
-
- ; NAME CHANGED TO SCRN2DSK TO AVOID CONFUSION W/ SCREEN BLANK UTILITIES
-
- CSEG SEGMENT PARA 'CODE'
- HANDLER PROC FAR
- ASSUME CS:CSEG
- ORG 100H
-
- START:
- JMP BOOTSTRAP
-
-
- ; notice was abbreviated to save memory (this is a resident program)
-
- COPYRIGHT DB 9,' **** SCREEN-SAVE **** ',13,10,10
- DB 9,'See Computer Shopper 6/86 ',13,10,10
- DB 9,'* Prt Sc saves to disk * ','$'
-
- BUSY DB 0
- SCR_NUM DW 0
- VIDEO_SEG DW ?
- SCR_BUF DB 2025 DUP (?) ; USE 2050 IF YOU ADD LF
- FILENAME DB 'SCREEN.'
- FILE_EXT DB '000',0
-
- INT_HANDLER:
- SAVE_REGS:
- STI
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH DS
- PUSH ES
- PUSH SI
- PUSH DI
-
- PUSH CS
- POP DS
- CMP BUSY,0
- JE SET_FLAG
- JMP EXIT
-
- SET_FLAG:
- MOV BUSY,1
-
- GET_SCRN_SEG:
- INT 11H
- AND AX,48
- CMP AL,48
- JE J1
- MOV VIDEO_SEG, 0B800H
- JMP FILL_BUF
- J1:
- MOV VIDEO_SEG,0B000H
-
- FILL_BUF:
- XOR DX,DX
- MOV BX,VIDEO_SEG
- MOV DS,BX
- MOV BX,CS
- MOV ES,BX
- XOR BX,BX
- MOV SI,BX
- LEA DI,SCR_BUF
- MOV CX,2000 ; 80 x 25 = 2000
-
- NEXT:
- MOV AX,[SI]
- MOV ES:[DI],AL
- INC SI
- INC SI
- INC DI
- INC DX
- CMP DX,80
- JNE CONTINUE
- MOV BYTE PTR ES:[DI],13
- INC DI
-
- ; my editor doesn't require line-feed, you may want it
- ; MOV BYTE PTR ES:[DI],10
- ; INC DI
-
- XOR DX,DX
-
- CONTINUE:
- LOOP NEXT
-
-
- SAVE_SCR:
- CLI
- MOV AH,3CH
- XOR CX,CX
- MOV BX,CS
- MOV DS,BX
- LEA DX,FILENAME
- INT 21H
- JC EXIT
- MOV BX,AX
- MOV AH,40H
- MOV CX,2025 ; SOURCE USES 2050 WHILE TEXT SAYS 2048
- MOV DX,CS ; IF YOU ADD CR & LF THE LAST PAIR WILL
- MOV DS,DX ; BE LOST. I'M USING 2025 BECAUSE I DON'T
- LEA DX,SCR_BUF ; USE THE LF.
- INT 21H ; 2048 OR LESS IS DESIRABLE TO AVOID ALLOCATING
- MOV AH,3EH ; ANOTHER CLUSTER FOR THE 2 BYTES
- INT 21H
- STI
-
- INC_SCR_NUM:
- MOV AX,SCR_NUM
- INC AX
- CMP AX,1000
- JNE J2
- XOR AX,AX
-
- J2:
- MOV SCR_NUM,AX
-
- UPDATE_NAME:
- CMP AX,0
- JE RESET_FLAG
- LEA DI,FILE_EXT
- MOV CL,100
- IDIV CL
- ADD AL,'0'
- MOV [DI],AL
- INC DI
- XCHG AH,AL
- XOR AH,AH
- MOV CL,10
- IDIV CL
- ADD AL,'0'
- MOV [DI],AL
- INC DI
- ADD AH,'0'
- MOV [DI],AH
-
-
- RESET_FLAG:
- MOV BUSY,0
-
- EXIT:
- POP DI
- POP SI
- POP ES
- POP DS
- POP DX
- POP CX
- POP BX
- POP AX
- IRET
-
- BOOTSTRAP:
- MOV AH,11
- MOV BX,0001H
- INT 10H
-
- MOV AX,600H
- XOR CX,CX
- MOV DH,24
- MOV DL,79
- MOV BH,31
- INT 10H
-
- MOV AH,2
- SUB BH,BH
- SUB DX,DX
- INT 10H
-
- MOV AX,CS
- MOV DS,AX
- LEA DX,COPYRIGHT
- MOV AH,9
- INT 21H
-
- XOR AX,AX
- MOV BUSY,AL
- MOV SCR_NUM,AX
-
- MOV AH,25H
- MOV AL,5
- MOV BX,CS
- MOV DS,BX
- LEA DX,INT_HANDLER
- INT 21H
-
- LEA DX,BOOTSTRAP
- ADD DX,5
- INT 27H
-
-
- HANDLER ENDP
- CSEG ENDS
- END START
-